from sqlalchemy import Column, Integer, String, DateTime  # 导入SQLAlchemy的列类型
from sqlalchemy.sql import func  # 导入SQL函数支持
from sqlalchemy.orm import relationship  # 导入关系支持
from app.database import Base  # 导入Base类，所有模型都继承自这个类


class User(Base):
    """用户模型类
    
    定义用户表结构，包含用户基本信息字段
    """
    __tablename__ = "users"  # 表名

    # 定义表字段
    id = Column(Integer, primary_key=True, index=True, autoincrement=True)  # 主键ID，自增
    username = Column(String(50), unique=True, nullable=False, index=True)  # 用户名，唯一且必填
    email = Column(String(100), unique=True, nullable=False, index=True)  # 电子邮箱，唯一且必填
    password = Column(String(255), nullable=False)  # 密码哈希，不存储明文密码
    created_at = Column(DateTime(timezone=True), server_default=func.now())  # 创建时间，自动设置为当前时间
    updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now())  # 更新时间，自动更新
    
    # 关系定义
    datasets = relationship("Dataset", back_populates="user")  # 用户上传的数据集
    tasks = relationship("DetectionTask", back_populates="user")  # 用户创建的检测任务
    prediction_logs = relationship("PredictionLog", back_populates="user")  # 用户创建的预测日志